热门文章
PHP函数介...
如何解决Red...
MySQL数据...
Tomcat 与 N...
Nginx 轻松搞...
Nginx额外篇...
Nginx静态资...
ThinkPHP...
PHP 微服务...
linux-window...

PHP获取今天、明天、上周、本周、上月、本月、本季度、上季度时间段方法

有趣的灵魂 2022-11-07 17:40:01

PHP获取今天、明天、上周、本周、上月、本月、本季度、上季度时间段方法


strtotime()函数


1
2
3
//date('n') 第几个月 
//date("w") 本周周几 
//date("t") 本月天数



时间段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//当前时间
echo date("Y-m-d H:i:s",time());
 
//明天此时时间
echo date("Y-m-d H:i:s",strtotime("+1 day"));
 
//指定时间
echo date("Y-m-d H:i:s",strtotime("-1 day"));
 
//下星期时间
echo date("Y-m-d H:i:s",strtotime("+1 week"))
 
//上个星期此时时间
echo date("Y-m-d H:i:s",strtotime("-1 week"));
 
//下星期几时间
echo date("Y-m-d H:i:s",strtotime("next Thursday"));
 
//指定时间
echo date("Y-m-d H:i:s",strtotime("last Thursday"));


以上PHP时间戳函数示例可知,strtotime能将任何英文文本的日期时间描述解析为Unix时间戳,我们结合mktime()或date()格式化日期时间获取指定的时间戳,实现所需要的日期时间


今天

1
2
$startDate mktime(0,0,0,date("m"),date("d"),date("Y"));
$endDate mktime(0,0,0,date('m'),date('d')+1,date('Y'))-1;


昨天

1
2
$startDate mktime(0,0,0,date("m"),date("d")-1,date("Y"));
$endDate mktime(0,0,0,date("m"),date("d"),date("Y"))-1;


明天

1
2
$startDate mktime(0,0,0,date("m"),date("d")+1,date("Y"));
$endDate mktime(0,0,0,date("m"),date("d")+2,date("Y"))-1;


本周

1
2
3
$w date("w");
$startDate mktime(0,0,0,date("m"),date("d")-$w+1,date("Y"));
$endDate=mktime(23,59,59,date('m'),date('d')-date('w')+7,date('Y'));


上周

1
2
$startDate=mktime(0,0,0,date('m'),date('d')-date('w')+1-7,date('Y'));
$endDate=mktime(23,59,59,date('m'),date('d')-date('w')+7-7,date('Y'));


下周

1
2
$startDate=mktime(0,0,0,date('m'),date('d')-date('w')+7+1,date('Y'));
$endDate=mktime(23,59,59,date('m'),date('d')-date('w')+7+7,date('Y'));


本月

1
2
$startDate mktime(0,0,0,date("m"),1,date("Y"));
$endDate mktime(23,59,59,date('m'),date('t'),date('Y'))-1;


上月

1
2
$startDate mktime(0,0,0,date("m")-1,1,date("Y"));
$endDate mktime(0,0,0,date("m"),1,date("Y"))-1;


下月

1
2
$startDate mktime(0,0,0,date("m")+1,1,date("Y"));
$endDate mktime(0,0,0,date("m")+2,1,date("Y"))-1;


本季度

1
2
3
4
5
6
7
8
9
10
11
12
$getMonthDays date("t",mktime(0, 0 , 0,date('n')+(date('n')-1)%3,1,date("Y")));//本季度未最后一月天数 
echo '<br>本季度:<br>'
echo date('Y-m-d H:i:s'mktime(0, 0, 0,date('n')-(date('n')-1)%3,1,date('Y'))),"n"
echo date('Y-m-d H:i:s'mktime(23,59,59,date('n')+(date('n')-1)%3,$getMonthDays,date('Y'))),"n"
$season ceil((date('n'))/3);//当月是第几季度
echo '<br>本季度起始时间:<br>';
echo date('Y-m-d H:i:s'mktime(0, 0, 0,$season*3-3+1,1,date('Y'))),"n";
echo date('Y-m-d H:i:s'mktime(23,59,59,$season*3,date('t',mktime(0, 0 , 0,$season*3,1,date("Y"))),date('Y'))),"n";
$season ceil((date('n'))/3)-1;//上季度是第几季度
echo '<br>上季度起始时间:<br>';
echo date('Y-m-d H:i:s'mktime(0, 0, 0,$season*3-3+1,1,date('Y'))),"n";
echo date('Y-m-d H:i:s'mktime(23,59,59,$season*3,date('t',mktime(0, 0 , 0,$season*3,1,date("Y"))),date('Y'))),"n";


今年

1
2
$startDate mktime(0,0,0,1,1,date("Y"));
$endDate mktime(0,0,0,1,1,date("Y")+1)-1;

结果如:

1483200000
1514735999

格式化:

2017-01-01 00:00:00
2017-12-31 23:59:59



语法


mktime(hour,minute,second,month,day,year,is_dst)

参数 描述

hour 可选。规定小时。

minute 可选。规定分钟。

second 可选。规定秒。

month 可选。规定用数字表示的月。

day 可选。规定天。

year 可选。规定年。在某些系统上,合法值介于 1901 - 2038 之间。不过在 PHP 5 中已经不存在这个限制了。

is_dst 

可选。如果时间在日光节约时间(DST)期间,则设置为1,否则设置为0,若未知,则设置为-1。


自 5.1.0 起,is_dst 参数被废弃。因此应该使用新的时区处理特性。


/*
 * 获取日期对应的星期
 * 参数$date为输入的日期数据,格式如:2018-6-22
 */
function get_week($date)
{
  //强制转换日期格式
  $date_str = date('Y-m-d', strtotime($date));
  //封装成数组
  $arr = explode("-", $date_str);
  //参数赋值
  //年
  $year = $arr[0];
  //月,输出2位整型,不够2位右对齐
  $month = sprintf('%02d', $arr[1]);
  //日,输出2位整型,不够2位右对齐
  $day = sprintf('%02d', $arr[2]);
  //时分秒默认赋值为0;
  $hour = $minute = $second = 0;
  //转换成时间戳
  $strap = mktime($hour, $minute, $second, $month, $day, $year);
  //获取数字型星期几
  $number_wk = date("w", $strap);
  //自定义星期数组
  $weekArr = array("0", "1", "2", "3", "4", "5", "6");
  //获取数字对应的星期
  return $weekArr[$number_wk];
}


/**
 * 获取一周日期
 * @param $time 时间戳
 * @param $format 转换格式
 */
function get_week($time, $format = "Y-m-d") {
  $week = date('w',$time);
  $weekname=array('星期一','星期二','星期三','星期四','星期五','星期六','星期日');
  //星期日排到末位
  if(empty($week)){
    $week=7;
  }
  for ($i=0;$i<=6;$i++){
    $data[$i]['date'] = date($format,strtotime( '+'. $i+1-$week .' days',$time));
    $data[$i]['week'] = $weekname[$i];
  }
  return $data;
}
/*
 * 获取某星期的开始时间和结束时间
 * time 时间
 * first 表示每周星期一为开始日期 0表示每周日为开始日期
 */
function getWeekMyActionAndEnd($time = '', $first = 1)
{
  //当前日期
  if (!$time) $time = time();
  $sdefaultDate = date("Y-m-d", $time);
  //$first =1 表示每周星期一为开始日期 0表示每周日为开始日期
  //获取当前周的第几天 周日是 0 周一到周六是 1 - 6
  $w = date('w', strtotime($sdefaultDate));
  //获取本周开始日期,如果$w是0,则表示周日,减去 6 天
  $week_start = date('Y-m-d', strtotime("$sdefaultDate -" . ($w ? $w - $first : 6) . ' days'));
  //本周结束日期
  $week_end = date('Y-m-d', strtotime("$week_start +6 days"));
  return array("week_start" => $week_start, "week_end" => $week_end);
}



最后修改:2023-05-03 15:52:21